home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / misc / TownMaze.lha / TownMaze / src.lzh / makespace.c < prev    next >
C/C++ Source or Header  |  1991-08-04  |  2KB  |  81 lines

  1. /*
  2. ** makespace.c  Copyright 1991 Kent Paul Dolan,
  3. **              Mountain View, CA, USA 94039-0755
  4. **
  5. ** Written to satisfy an inquiry on USENet's rec.games.programmer newsgroup.
  6. ** May be freely used or modified in any non-commercial work.  Copyrighted
  7. ** only to prevent patenting by someone else.
  8. */
  9.  
  10. #include <stdio.h>
  11. #include "townmaze.h"
  12. #include "townproto.h"
  13.  
  14. #ifdef __STDC__
  15. void makespace()
  16. #else
  17. int makespace()
  18. #endif
  19. {
  20.   int i,j;
  21.  
  22.   if ((statlist = (DLENODE *)malloc(listsize * sizeof(DLENODE))) == NULL)
  23.   {
  24.     fprintf(stderr,
  25.       "Unable to allocate space for cell list for that size maze\n");
  26.     exit(1);
  27.   }
  28.  
  29.   if ((cmaze = (char **)malloc(mazeheight * sizeof(char *))) == NULL)
  30.   {
  31.     fprintf(stderr,"%s%s",
  32.       "Unable to allocate space for maze display pointer list for that",
  33.       " size maze\n");
  34. #ifdef __STDC__
  35.     if (free(statlist) == -1)
  36.       fprintf(stderr,"unable to free(statlist) on bailout\n");
  37. #else
  38.     free(statlist);
  39. #endif
  40.  
  41.     exit(1);
  42.   }
  43.  
  44. /*
  45. ** Thanks to  "GLENN E. HOST" <host@ccf4.nrl.navy.mil> for spotting a bug
  46. ** here that should have killed something during testing; I had mazewidth
  47. ** for mazeheight in the loop limit here.
  48. */
  49.  
  50.   for (i = 0; i < mazeheight; i++)
  51.   {
  52.     if ((cmaze[i] = (char *)malloc(mazewidth * sizeof(char))) == NULL)
  53.     {
  54.       fprintf(stderr,
  55.       "Unable to allocate space for maze char array for that size maze\n");
  56. #ifdef __STDC__
  57.       for (j = 0; j < i; j++)
  58.       {
  59.         if (free(cmaze[j]) == -1)
  60.         {
  61.           fprintf(stderr,"unable to free(cmaze[%d]) on bailout\n",j);
  62.           break;
  63.         }
  64.       }
  65.       if (free(cmaze) == -1)
  66.         fprintf(stderr,"unable to free(cmaze) on bailout\n");
  67.       else
  68.         if (free(statlist) == -1)
  69.           fprintf(stderr,"unable to free(statlist) on bailout\n");
  70. #else
  71.       for (j = 0; j < i; j++) free(cmaze[j]);
  72.       free(cmaze);
  73.       free(statlist);
  74. #endif
  75.       exit(1);
  76.     }
  77.   }
  78.   
  79.   return;
  80. }
  81.